<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 我在问你一个问题，如何想对象里添加一个属性？如何读取对象里某个属性对应的值？
        // 你一定想说: 你疯了吗?直接通过 obj.xxx 不就可以读取或者添加了吗？
        // 但是我要告诉你的是，Reflect提供了set和get方法去做这些事情
        let obj = {};
        Reflect.set(obj,'name','mks');//将obj对象中的name属性赋值为mks
        console.log(Reflect.get(obj,'name'));//获取obj对象中的name属性对应的值


        // 也许你要问了，这些玩意有啥用啊？别急，接着往下看
        // 还记得15小节也就是上一小节写的这些吗
        let set = new Set();

        let proxy = new Proxy(set, {
            // 因为Set其实说到底也是一种Object，不信你typeof new Set()就会发现
            // 而set类数据赋值都是通过add()方法的，可是如果有的人就 set.xxx = xxx，这样去触发set()函数来赋值呢？答案是：顺其自然，原来怎么做，那就怎么做. 我们可以结合Reflect的set方法来做这里
            set(target, key, value) {
                Reflect.set(...arguments); //怎么样？简单粗暴吧
            },
            get(target, key) {
                console.log(target, key);
                let value = target[key];
                if (typeof value == "function") {
                    return value.bind(target);
                }
                return value;
            }
        });
    </script>
</body>

</html>